home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / prolog_2.zip / PUZZLES.ZIP / SIEVE.PRO < prev    next >
Text File  |  1986-07-20  |  640b  |  23 lines

  1. /*                    SIEVE OF ERASTHATONES
  2.  
  3.  
  4. Ask ?-primes( 100, L ).   to get all the primes from 1 to 100
  5. printed out as the list "L".  */
  6.  
  7. primes( Limit, Ps ) :- integers( 2, Limit, Is ), sift( Is, Ps ).
  8.  
  9. integers( Low, High, [Low|Rest] ) :-
  10.    Low =< High, !, M is Low+1, integers(M, High, Rest ).
  11. integers( _,_,[] ).
  12.  
  13. sift( [], [] ).
  14. sift( [I|Is], [I|Ps]) :- remove(I,Is,New), sift( New, Ps ).
  15.  
  16. remove(P,[],[]).
  17. remove(P,[I|Is],[I|Nis]) :-
  18.    not( 0 is I mod P ),
  19.    !,
  20.    remove(P, Is, Nis).
  21.  
  22. remove(P,[I|Is],Nis) :- 0 is I mod P, remove(P, Is, Nis).
  23.